package com.yongqi.duocai.utils;

import com.alibaba.fastjson.JSONObject;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.google.gson.Gson;
import com.yongqi.duocai.config.AliClient;
import com.yongqi.duocai.exception.BusinessException;
import com.yongqi.duocai.exception.ResponseEnum;

import java.rmi.ServerException;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.locks.Lock;

/**
 * 1.描述（@desc）：
 * 2.作者（@author）：夏亮辉
 * 3.日期（@date）：2021年06月19  12:56
 * 4.版本（@version）：1.0.0
 * 5.版权：
 */

public class NoteUtils {

    /**
     * 生成一个随机数
     */
    private static Random random = new Random();

    /**
     * 生成一个6位数的验证码
     * @return
     */
    public static synchronized String productCode(){
        String code = "";
        for (int i = 0; i < 6; i++) {
            int c = random.nextInt(10);
            if(c == 0 && code.length() == 0){
                c += 1;
            }
            code += c;
        }
        return code;
    }

    /**
     * 发送验证码
     * @param phone
     * @return
     */
    public static synchronized boolean sendMessage(String phone, Map<String, String> param){
        SendSmsResponse sendSmsResponse = null;

        try {
            Client client = AliClient.createClient();
            JSONObject jsonObject = new JSONObject();
            String code = param.get("code");
            jsonObject.put("code", code);
            System.out.println(jsonObject.toJSONString());
            SendSmsRequest sendSmsRequest = new SendSmsRequest()
                    .setPhoneNumbers(phone)
                    // 必填：短信签名-可以在短信控制台中查看
                    .setSignName("宁波甬棋商业管理有限公司")
                    // 必填: 短信模板 - 可在短信控制台中找到，发送国际/港澳台消息时，请使用国际/港澳台短信模版
                    .setTemplateCode("SMS_217871191")
                    //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
                    //友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
                    //参考：request.setTemplateParam("{\"变量1\":\"值1\",\"变量2\":\"值2\",\"变量3\":\"值3\"}")
                    .setTemplateParam(jsonObject.toJSONString());

            // 使用客户端对象携带请求参数向远程阿里云服务发起远程调用，并得到响应结果。
            sendSmsResponse = client.sendSms(sendSmsRequest);

            System.out.println(sendSmsResponse.getBody());
            if(sendSmsResponse.body.code != null && sendSmsResponse.body.code.equals("OK")){
                return true;
            }
        } catch (ServerException e) {
            e.printStackTrace();
            throw new BusinessException(ResponseEnum.ALIYUN_SMS_ERROR, e);
        }catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}
